<?php 
	class Code{
		private $img;
		//图片资源
		private $fontSize;
		//字体大小
		private $bgWidth;
		// 画布宽度
		private $bgHeight;
		// 画布高度
		private $codeLen;
		//验证码长度
		private $codeSeed;
		//验证码字典
		private $fontFile;
		//字体文件路径
		private $lineNum;
		//干扰线的数量
		private $pixelNum;
		//干扰点的数量
		private $bgColor;
		//背景颜色
		public function __construct($bgColor=null,$pixelNum=null,$lineNum=null,$codeLen=null,$bgWidth=null,$bgHeight=null,$fontSize=null,$codeSeed=null,$fontFile=null){
			$this->bgWidth  = is_null($bgWidth)    ? C('CODE_BGWIDTH') : $bgWidth ;
			// 各种参数预定义
			$this->bgHeight = is_null($bgHeight)    ? C('CODE_BGHEIGHT') : $bgHeight ;
			// 各种参数预定义
			$this->codeLen  = is_null($codeLen)     ? C('CODE_LEN') : $codeLen ;
			// 各种参数预定义
			$this->codeSeed=  is_null($codeSeed)  ? C('CODE_SEED') : $codeSeed ;
			// 各种参数预定义
			$this->fontFile    =  is_null($fontFile)      ? C('CODE_FONTFILE') : $fontFile ;
			// 各种参数预定义
			$this->fontSize    =  is_null($fontSize)    ? C('CODE_FONSIZE') : $fontSize ;
			// 各种参数预定义
			$this->lineNum    =  is_null($lineNum)    ? C('CODE_LINENUM') : $lineNum ;
			// 各种参数预定义
			$this->pixelNum  = is_null($pixelNum)    ? C('CODE_PIXELNUM') : $pixelNum ;
			// 各种参数预定义
			$this->bgColor  = is_null($bgColor)    ? C('CODE_BGCOLOR') : $bgColor ;
			// 各种参数预定义
		}
		public function show(){
			header('Content-type:image/png');
			//声明头部
			$this->_create_bg();
			//创建画布
			$this->_write_font();
			//写字
			$this->_distrub();
			//画干扰
			imagepng($this->img);
			//输出
			imagedestroy($this->img);
			//销毁
		}
		private function _create_bg(){
			$this->img = imagecreatetruecolor($this->bgWidth, $this->bgHeight);
			//创建画布
			$bgColor = hexdec($this->bgColor);
			//画布填充色
			imagefill($this->img, 0, 0, $bgColor);
			//填充画布
		}
		private function _write_font(){
			$codeStr = '';
			for ($i=0; $i <$this->codeLen; $i++) { 
				$fontColor = imagecolorallocate($this->img, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255));
				$x = ($this->bgWidth /$this->codeLen)*$i +10;
				$y = ($this->bgHeight+ $this->fontSize) /2;
				//字体的坐标
				$j = mt_rand(0,strlen($this->codeSeed)-1);
				//验证码字典的下标
				imagettftext($this->img, $this->fontSize, mt_rand(0,50), $x, $y, $fontColor, $this->fontFile, $this->codeSeed[$j]);
				//记录验证码
				$codeStr.=$this->codeSeed[$j]; 
			}
			session_id() || session_start();
			$_SESSION['code'] =strtoupper($codeStr);
			//画布上写字
		}
		private function _distrub(){
			$Color = imagecolorallocate($this->img, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255));
			//干扰颜色
			for ($i=0; $i <$this->lineNum; $i++) { 	
				imageline($this->img, mt_rand(0,$this->bgWidth), mt_rand(0,$this->bgHeight), mt_rand(0,$this->bgWidth), mt_rand(0,$this->bgHeight), $Color);
				//画干扰线
			}
			//干扰线
			for ($i=0; $i <$this->pixelNum; $i++) { 
				imagesetpixel($this->img, mt_rand(0,$this->bgWidth),mt_rand(0,$this->bgHeight), $Color);
				//画干扰点
			}
			//干扰小点
		}
	}
 ?>